package swingxrcp.framework.model.environment;

/**
 * 版本信息
 *
 * @author liangfei
 *
 */
public class Version implements Comparable<Version> {

	/**
	 * 构造版本信息
	 *
	 * @param versionNumber 版本号
	 * @param versionType 版本类型
	 * @param releaseDate 版本发布日期
	 */
	public Version(String versionNumber, String versionType, String releaseDate) {
		this.versionNumber = versionNumber;
		this.versionType = versionType;
		this.releaseDate = releaseDate;
	}

	private String versionNumber;

	/**
	 * 获取版本号，通常为“主版本号.次版本号.构建版本号”，如：1.0.2
	 *
	 * @return 版本号
	 */
	public String getVersionNumber() {
		return versionNumber;
	}

	private String versionType;

	/**
	 * 获取版本类型，如：“测试”，“试运行”，“生产”等
	 *
	 * @return 版本类型
	 */
	public String getVersionType() {
		return versionType;
	}

	private String releaseDate;

	/**
	 * 获取版本发布日期，如：2008-10-24
	 *
	 * @return 版本发布日期
	 */
	public String getReleaseDate() {
		return releaseDate;
	}

	/**
	 * 比较版本的高低
	 *
	 * @param otherVersion 被对比的其它版本
	 * @return 等于0表示相等，大于0表示当前版本高，小于0表示当前版本低
	 */
	public int compareTo(Version otherVersion) {
		if (otherVersion == null)
			return 1;
		if (this == otherVersion)
			return 0;
		if (this.versionNumber == null && otherVersion.versionNumber == null)
			return 0;
		if (this.versionNumber == null)
			return -1;
		if (otherVersion.versionNumber == null)
			return 1;
		return this.versionNumber.compareTo(otherVersion.versionNumber);
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((releaseDate == null) ? 0 : releaseDate.hashCode());
		result = prime * result
				+ ((versionNumber == null) ? 0 : versionNumber.hashCode());
		result = prime * result
				+ ((versionType == null) ? 0 : versionType.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Version other = (Version) obj;
		if (releaseDate == null) {
			if (other.releaseDate != null)
				return false;
		} else if (!releaseDate.equals(other.releaseDate))
			return false;
		if (versionNumber == null) {
			if (other.versionNumber != null)
				return false;
		} else if (!versionNumber.equals(other.versionNumber))
			return false;
		if (versionType == null) {
			if (other.versionType != null)
				return false;
		} else if (!versionType.equals(other.versionType))
			return false;
		return true;
	}

}
